<template>
	<p><button @click="show = !show">显示/隐藏</button></p>
	<Transition duration="550" name="fade"
		@before-enter="onBeforeEnter"
	  @enter="onEnter"
	  @after-enter="onAfterEnter"
	  @enter-cancelled="onEnterCancelled"
	  @before-leave="onBeforeLeave"
	  @leave="onLeave"
	  @after-leave="onAfterLeave"
	  @leave-cancelled="onLeaveCancelled">
		<p v-show="show">欢迎光临！</p>
	</Transition>
</template>

<script setup>
	import { ref } from "vue" 
	
	const show = ref(true) 
	
	// 在元素被插入到 DOM 之前被调用
	// 用这个来设置元素的 "enter-from" 状态
	function onBeforeEnter(el) {
	}
	
	// 在元素被插入到 DOM 之后的下一帧被调用
	// 用这个来开始进入动画
	function onEnter(el, done) {
	  // 调用回调函数 done 表示过渡结束
	  // 如果与 CSS 结合使用，则这个回调是可选参数
	  done()
	}
	
	// 当进入过渡完成时调用。
	function onAfterEnter(el) {}
	function onEnterCancelled(el) {}
	
	// 在 leave 钩子之前调用
	// 大多数时候，你应该只会用到 leave 钩子
	function onBeforeLeave(el) {}
	
	// 在离开过渡开始时调用
	// 用这个来开始离开动画
	function onLeave(el, done) {
	  // 调用回调函数 done 表示过渡结束
	  // 如果与 CSS 结合使用，则这个回调是可选参数
	  done()
	}
	
	// 在离开过渡完成、
	// 且元素已从 DOM 中移除时调用
	function onAfterLeave(el) {}
	
	// 仅在 v-show 过渡中可用
	function onLeaveCancelled(el) {}

</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
.fade-enter-active,
.fade-leave-active {
  transition: all 0.3s ease-in-out;
}
.fade-enter-from,
.fade-leave-to {
  opacity: 0;
}
</style>
